package com.ruoyi.produce.base.bom.service;

import com.ruoyi.machine.base.device.domain.Device;
import com.ruoyi.produce.base.bom.domain.Bom;
import com.ruoyi.produce.base.bom.domain.ProductionMachine;
import com.ruoyi.produce.base.mould.domain.Mould;
import com.ruoyi.produce.base.procedure.domain.Procedure;
import com.ruoyi.psi.base.product.domain.ProductCond;
import com.ruoyi.psi.base.product.domain.ProductDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 产品结构
 * 业务层
 * @author Drj 2021/6/28
 */
public interface IBomService {


    /**
     * 获取存在Bom的所有产品
     * @return
     */
    public List<ProductDto> selectProduceForBom(ProductCond cond);
    /**
     * 查找Bom
     * @param produceId 产品编号
     * @return
     */
    public Bom selectBom(String produceId);


    /**
     * 新增Bom
     * @param bom
     * @return
     */
    public int insertBom(Bom bom) throws Exception;

    /**
     * 更新Bom
     * @param bom
     * @return
     */
    public int updateBom(Bom bom) throws Exception;
    /**
     * 删除Bom
     * 仅修改删除标志
     * @param bom
     * @return
     */
    public int updateBomDeleteFlag(Bom bom);

    /**
     * 检查是否存在子父构件循环，不能保存
     * @param bom
     * @return
     */
    public boolean checkBomParent(Bom bom);

    /**
     * 新增时查验是否已存在对应产品结构清单
     * @param bom
     * @return
     */
    public boolean checkBomExist(Bom bom);

    /**
     * 查询产品结构对应的工序
     * @param produceId
     * @return
     */
    public List<Procedure> selectProcedureList(String produceId);

    /**
     * 查询产品结构对应的设备
     * @param produceId
     * @return
     */
    public List<ProductionMachine> selectMachineList(String produceId);

    /**
     * 查询产品结构对应的模具
     * @param produceId
     * @return
     */
    public List<Mould> selectMouldList(String produceId);

    /**
     * 删除父件对应的指定子件
     * @param produceId
     * @param produceParentId
     * @return
     */
    public int deleteBomChild(String produceId, String produceParentId);
}
